package net.tycmc.cty.ctyms.timejob.iems.service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.configuration.ConfigurationException;

import com.tycmc.functions.util.MapGetter;

import net.tycmc.bulb.common.util.DateUtil;
import net.tycmc.bulb.common.util.StringUtil;
import net.tycmc.cty.ctyms.timejob.common.DateControl;
import net.tycmc.cty.ctyms.timejob.common.DynamicReadConfig;
import net.tycmc.cty.ctyms.timejob.iems.dao.DataMissingMonitorDao;

public class DataMissingMonitorService {
	private DataMissingMonitorDao dmmd;
	

	public DataMissingMonitorDao getDmmd() {
		return dmmd;
	}
	public void setDmmd(DataMissingMonitorDao dmmd) {
		this.dmmd = dmmd;
	}
	/**
	 * 获取未采集到参数的设备，并存于数据库中
	 */
	public void getVclNoParam(){
		String dateTime=DateUtil.addDay(-7);//获取本次统计时间
		//获取上次统计的时间,若时间相同则不再统计
		List<Map<String,Object>>LastTimelist=new ArrayList<Map<String,Object>>();//上次统计的时间集合
		LastTimelist=dmmd.getFlagOfMitor();
		
		//二期优化：是否需要备份数据
		String isbakTable="";
		try {
			isbakTable = DynamicReadConfig.getConfigProperty("config.properties", "DataMissingMointor");
		} catch (ConfigurationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		if(!StringUtil.isValid(isbakTable)){
			isbakTable = "0";
		}
		
		/*参数未统计*/
		if(!dateTime.equals(MapGetter.getString(LastTimelist.get(0),"pcf_FinalmsgTime"))){//判断参数统计上次统计时间和这次统计时间是否相同，不同则执行
			System.out.println("执行未统计参数设备集合开始---------------------------------------"+DateControl.getDateTime(0));
			List<Map<String,Object>>listD=dmmd.getVclEcmRunMoref(dateTime,"VPEVcl_D","1");//发动机运行时长大于0.5小时，大一设备
			List<Map<String,Object>>listJ=dmmd.getVclEcmRunMoref(dateTime,"VPEVcl_J","1");//发动机运行时长大于0.5小时，J设备
			List<Map<String,Object>>listJpp=dmmd.getVclEcmRunMoref(dateTime,"VPEVcl_JPP","1");//发动机运行时长大于0.5小时，JPP设备
			List<Map<String,Object>>listR=new ArrayList<Map<String,Object>>();//最终结果
			listR.addAll(listD);
			listR.addAll(listJ);
			listR.addAll(listJpp);
			if(listR.size()>0){
			dmmd.saveDataNoCollectParam(listR,dateTime,isbakTable);
			}
		}
		/*统计频率超过1分钟*/
		if(!dateTime.equals(MapGetter.getString(LastTimelist.get(1),"pcf_FinalmsgTime"))){//判断执行频率上次统计时间和这次统计时间是否相同，不同则执行
			System.out.println("执行统计频率超过1分钟设备集合开始---------------------------------------"+DateControl.getDateTime(0));
			List<Map<String,Object>>listD=dmmd.getVclEcmRunMoref(dateTime,"VPEVcl_D","2");//钥匙开机时长大于0.5小时，大一设备
			List<Map<String,Object>>listJ=dmmd.getVclEcmRunMoref(dateTime,"VPEVcl_J","2");//钥匙开机时长大于0.5小时，J设备
			List<Map<String,Object>>listJpp=dmmd.getVclEcmRunMoref(dateTime,"VPEVcl_JPP","2");//钥匙开机时长大于0.5小时，JPP设备
			List<Map<String,Object>>listR=new ArrayList<Map<String,Object>>();//最终结果
			listR.addAll(listD);
			listR.addAll(listJ);
			listR.addAll(listJpp);
			if(listR.size()>0){
			dmmd.saveDataFreMoreOMIN(listR,dateTime,isbakTable);
			}
		}
		/*档位及车速无数据*/
		if(!dateTime.equals(MapGetter.getString(LastTimelist.get(2),"pcf_FinalmsgTime"))){//判断档位车速上次统计时间和这次统计时间是否相同，不同则执行
			System.out.println("执行档位车速无数据设备集合开始---------------------------------------"+DateControl.getDateTime(0));
			List<Map<String,Object>> listR=dmmd.getNoDB2DataList(dateTime,"DAVcl_JPP");
			if(listR.size()>0){
			dmmd.saveDataNoDb2List(listR,dateTime,isbakTable);//将无档位车速的设备存储于表中
			}
		}
		/*Dutycycle无数据*/
		if(!dateTime.equals(MapGetter.getString(LastTimelist.get(3),"pcf_FinalmsgTime"))){//判断dutyCycle上次统计时间和本次统计时间是否相同
			System.out.println("执行DutyCycle设备集合开始---------------------------------------"+DateControl.getDateTime(0));
			List<Map<String,Object>> listR=dmmd.getDataNoDutyCycleList(dateTime,"VPEVcl_JPP");
			if(listR.size()>0){
			dmmd.saveDataNoDutyCycleList(listR,dateTime,isbakTable);
			}
		}
		/*载重利用率为空或0或--*/
		if(!dateTime.equals(MapGetter.getString(LastTimelist.get(4),"pcf_FinalmsgTime"))){//判断载重利用率上次统计时间和本次统计时间是否相同
			System.out.println("执行载重利用率设备集合开始---------------------------------------"+DateControl.getDateTime(0));
			List<Map<String,Object>> listR=dmmd.getDataNoLoadRate(dateTime);
			System.out.println("载重利用率查询结果"+listR.size()+"条");
			if(listR.size()>0){
			dmmd.saveDataNoLoadRate(listR,dateTime,isbakTable);
			}
		}
		/*里程选择不正确*/
		if(!dateTime.equals(MapGetter.getString(LastTimelist.get(5),"pcf_FinalmsgTime"))){//判断载重利用率上次统计时间和本次统计时间是否相同
			System.out.println("执行里程选择正确与否设备集合开始---------------------------------------"+DateControl.getDateTime(0));
			List<Map<String,Object>> listR=dmmd.getDataNoRunKmid(dateTime);
			if(listR.size()>0){
			dmmd.saveDataNoRunKmid(listR,dateTime,isbakTable);
			}
		}
	}
}
